
//加载express模块
var express = require('express');
//加载body-parse接受前台发过来的数据
var bodyParser = require('body-parser');
//加载cookies
var cookies = require('cookies');
//加载模板
var swig = require('swig');

var User = require('./models/User');
//创建app应用 =>nodejs http.createServer();
var app = express();

//引入数据库
var mongoose = require('mongoose');

app.use(bodyParser.urlencoded({extended: true}));

app.use(function(req,res,next) {
    req.cookies = new cookies(req,res);

    req.userInfo = {};

    //解析登录的用户信息
    if(req.cookies.get('userInfo')) {
        try {
            req.userInfo = JSON.parse(req.cookies.get('userInfo'));

            //获取当前登录用户的管理类型
            User.findById(req.userInfo._id).then(function(userInfo) {
                req.userInfo.isAdmin = userInfo.isAdmin;
            });
            next();
        } catch(e) {
            next();
        }
    } else {
        next();
    }

    // console.log(req.cookies.get('userInfo'));
    // next();
});


//设置静态文件托管
//访用户访问的url以/public开始，那么直接返回__dirname + '/public'下的文件
app.use('/public',express.static(__dirname + '/public'));

//第一个参数模板引擎名称，同时也是模板文件的后缀
//第二个参数标识用于解析处理模板内容的方法
app.engine('html',swig.renderFile);

//设置模板文件存放的目录，第一个参数必须是views，第二个参数是目录
app.set('views','./views');

//注册所使用的模板引擎，第一个参数必须是view engine，第二个参数和app.engine这个方法定义的模板引擎的名称（第一个参数）是一致的
app.set('view engine','html');

//取消模板缓存
swig.setDefaults({cache:false});



app.use('/admin',require('./routers/admin'));
app.use('/api',require('./routers/api'));
app.use('/',require('./routers/main'));


// app.get('/',function(req,res,next) {
//     // res.send('<h1>欢迎光临我的博客</h1>');
//     //读取views目录下的指定文件，解析并返回给客户端
//     //第一个参数，表示模板的文件，相对于views目录，views/index.html
//     //第二个参数，传递给模板使用的数据
//     res.render('index');
// });

// app.get('/main.css',function(req,res,next) {
//     res.setHeader('Content-Type','text/css');
//     res.send("body {background:red;}");
// });

mongoose.Promise = require('bluebird');

mongoose.connect('mongodb://localhost:27017',{ useMongoClient: true },function(err) {
    if(err) {
        console.log('数据库连接失败');
    } else {
        console.log('数据库连接成功');
        app.listen(8081);
    }
});




// 用户发送http请求  -> url --> 解析路由  -> 找到匹配的规则 -> 执行绑定函数，返回对应内容给客户端

// /public --> 静态  ->  直接读取指定目录下的文件，返回给用户
// ->动态  -> 处理业务逻辑，加载模板，解析模板  -> 返回数据给用户